﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.Composite.Presentation.Events;
using MP3Ganizer.Common;

namespace MP3Ganizer.Events.User
{

  /// <summary>
  /// Classe représentant un évènement suite à une action utilisateur.
  /// </summary>
  public class UserActionEvent : CompositePresentationEvent<UserActionEventArgs>
  {
  }

  /// <summary>
  /// Classe d'arguments définissant l'action utilisateur.
  /// </summary>
  public class UserActionEventArgs
  {
    /// <summary>
    /// Action réalisée.
    /// </summary>
    public Enums.UserAction Action { get; set; }
    /// <summary>
    /// Données associées à l'action.
    /// </summary>
    public object Data { get; set; }

    public Action CallBackMethod { get; set; }

    /// <summary>
    /// Constructeur par défaut.
    /// </summary>
    public UserActionEventArgs()
    {
      Action = Enums.UserAction.Undefined;
    }

    /// <summary>
    /// Constructeur.
    /// </summary>
    /// <param name="action">MP3Ganizer.Common.Enums.UserAction</param>
    public UserActionEventArgs(Enums.UserAction action)
    {
      Action = action;
    }

      /// <summary>
    /// Constructeur
      /// </summary>
      /// <param name="action"></param>
      /// <param name="callBackMethod"></param>
    public UserActionEventArgs(Enums.UserAction action, Action callBackMethod)
        : this(action)
    {
        CallBackMethod = callBackMethod;
    }

    /// <summary>
    /// Constructeur
    /// </summary>
    /// <param name="action">MP3Ganizer.Common.Enums.UserAction</param>
    /// <param name="data">object</param>
    public UserActionEventArgs(Enums.UserAction action, object data)
      : this(action)
    {
      Data = data;
    }

    public UserActionEventArgs(Enums.UserAction action, object data, Action callBackMethod)
        : this(action, data)
    {
        CallBackMethod = callBackMethod;
    }
  }
}
